﻿using System;
using System.Linq;
using System.Collections.Generic;
using SIM.Geo.DA;
using SIM.Geo.BE;
using System.Transactions;

namespace SIM.Geo.BL
{
    public class BLAvanceLabor
    {
        #region Metodos
        /// <summary>
        /// Método que devuelve la lista de AvanceLabor
        /// </summary>
        /// <returns></returns>
        public List<AvanceLabor> ListarAvanceLabor()
        {
            return Accesor.ListarAvanceLabor();
        }
        /// <summary>
        /// Método para insertar una AvanceLabor
        /// </summary>
        /// <param name="AvanceLabor"></param>
        /// <returns></returns>
        public int InsertarAvanceLabor(AvanceLabor avanceLabor)
        {
            avanceLabor.CodigoAvanceLabor = Accesor.GenerarCodigoAvanceLabor(avanceLabor.Anio, avanceLabor.Mes);
            int retorno = 0;
            using (TransactionScope transaccion = new TransactionScope())
            {
                //Guarda los Avances diarios
                //foreach (var item in avanceLabor.DetalleAvanceLabor)
                //{
                //    item.CodigoAvanceLabor = avanceLabor.CodigoAvanceLabor;
                //}

                retorno = Accesor.InsertarAvanceLabor(avanceLabor);

                transaccion.Complete();
            }

            return retorno;
          
        }
        /// <summary>
        /// Método para modificar un AvanceLabor
        /// </summary>
        /// <param name="AvanceLabor"></param>
        public void ModificarAvanceLabor(AvanceLabor AvanceLabor)
        {
            using (TransactionScope transaccion = new TransactionScope())
            {
                //Primero elimino los detalles anteriores

                //AvanceLabores
                DADetalleAvanceLabor daDetalleAvanceLabor = new DADetalleAvanceLabor();

                var detallesAvanceLabor = daDetalleAvanceLabor.ListarDetalleAvanceLabor(AvanceLabor.CodigoAvanceLabor);
                foreach (var item in detallesAvanceLabor)
                {
                    daDetalleAvanceLabor.EliminarDetalleAvanceLabor(item);
                }


                //Modifico el AvanceLabor
                var AvanceLaborEdit = Accesor.ObtenerAvanceLabor(AvanceLabor.CodigoAvanceLabor);
                AvanceLaborEdit.Anio = AvanceLabor.Anio;
                AvanceLaborEdit.Mes = AvanceLabor.Mes;
                AvanceLaborEdit.Semana = AvanceLabor.Semana;
                AvanceLaborEdit.FechaInicio = AvanceLabor.FechaInicio;
                AvanceLaborEdit.FechaFin = AvanceLabor.FechaFin;
                AvanceLaborEdit.AvanceTotal = AvanceLabor.AvanceTotal;
                AvanceLaborEdit.DetalleAvanceLabor = AvanceLabor.DetalleAvanceLabor;
                
                Accesor.ModificarAvanceLabor(AvanceLaborEdit);

                transaccion.Complete();
            }
        }
        /// <summary>
        /// Método para eliminar AvanceLabor
        /// </summary>
        /// <param name="AvanceLabor"></param>
        public void EliminarAvanceLabor(int codigoAvanceLabor)
        {
            //var AvanceLabor = Accesor.ObtenerAvanceLabor(codigoAvanceLabor);
            //Accesor.EliminarAvanceLabor(AvanceLabor);
            Accesor.EliminarAvanceLabor(codigoAvanceLabor);
        }

        /// <summary>
        /// Método que devuelve AvanceLabor por codigo
        /// </summary>
        /// <param name="codigoAvanceLabor"></param>
        /// <returns></returns>
        public AvanceLabor ObtenerAvanceLabor(int codigoAvanceLabor)
        {
            return Accesor.ObtenerAvanceLabor(codigoAvanceLabor);
        }

        /// <summary>
        /// Método que devuelve lista de AvanceLabor
        /// </summary>
        /// <param name="codigoAvanceLabor"></param>
        /// <returns></returns>
        public List<AvanceLabor>BuscarAvanceLabor(int anio, string mes)
        {
            return Accesor.BuscarAvanceLabor(anio, mes);
        }

        /// <summary>
        /// Genera Codigo de Avance Diario
        /// </summary>
        /// <param name="anio"></param>
        /// <param name="mes"></param>
        /// <param name="codigoMaquina"></param>
        /// <returns></returns>
        public int GenerarCodigoAvanceLabor(int anio, string mes)
        {
            return Accesor.GenerarCodigoAvanceLabor(anio, mes);

            /*
            int codigoMaximo = 1;
            var lista = Accesor.ListarAvanceLabor(anio, mes);
            if (lista != null)
            {
                if (lista.Count > 0)
                {
                    codigoMaximo = lista.Max(x => x.CodigoAvanceLabor);
                    codigoMaximo = codigoMaximo + 1;
                    string correlativo = Convert.ToString(codigoMaximo);//.PadRight(3, "0");
                    var datos = string.Format("{0}{1}{2}", anio, mes, correlativo.PadLeft(3, '0').ToString());
                    codigoMaximo = Convert.ToInt32(datos);
                }
                else
                {
                    string correlativo = Convert.ToString(codigoMaximo);//.PadRight(3, "0");
                    var datos = string.Format("{0}{1}{2}", anio, mes, correlativo.PadLeft(3, '0').ToString());
                    codigoMaximo = Convert.ToInt32(datos);
                }

            }
            else
            {
                string correlativo = Convert.ToString(codigoMaximo);//.PadRight(3, "0");
                var datos = string.Format("{0}{1}{2}", anio, mes, correlativo.PadLeft(3, '0').ToString());
                codigoMaximo = Convert.ToInt32(datos);
            }

            return codigoMaximo;
             */
        }

        #endregion

        #region Accesor
        private static DAAvanceLabor Accesor
        {
            [System.Diagnostics.DebuggerStepThrough]
            get { return new DAAvanceLabor(); }
        }
        #endregion
    }
}
